/**
 * @scope enchant.JGZ.Resource.prototype
 */
enchant.JGZ.Resource = enchant.Class.create({
  /**
   * リソースのpreloadとインスタンス化を行う
   * @constructs
   * @param {Array} sources リソースの配列.
   */
  initialize : function(sources) {
    var game      = enchant.Game.instance;
    this.sources  = sources;
    this._instance= {};

    for(var idx in sources) {
      game.preload(sources[idx]);
    }

  },
  /**
   * 後からでもリソースを個別に追加可能
   * @param {String}  idx
   * @param {String}  source
   */
  setSource : function(idx, source) {
    var game          = enchant.Game.instance;
    this.sources[idx] = source;            
    game.preload(source);
  },
  /**
   * 全てのリソースをインスタンス化し読み込む
   */
  readAllResource : function() {
    var game    = enchant.Game.instance;
    var sources = this.sources;
    for(var idx in sources) {
      this._instance[idx] = game.assets[sources[idx]];
    }
  }
});
/**
 * @scope enchant.JGZ.Image.prototype
 */
enchant.JGZ.Images = enchant.Class.create(enchant.JGZ.Resource, {
  /**
   * イメージリソースを管理する
   * sourcesは配列
   * {
   *    "success" : "images/card1.jpg",
   *    "false"   : "images/card2.jpg",
   * }
   * @constructs
   * @param {Array} sources
   */
  initialize : function(sources) {
    enchant.JGZ.Resource.call(this, sources);
  },
  /**
   * インデックスを指定してリソースを呼び出す
   * @param {String}  idx
   */
  read : function(idx) {
    return this._instance[idx];
  },
  /**
   * 登録されている画像リソースからスプライトイメージを作成する
   * w : width
   * h : height
   * i : index
   * x : x
   * y : y
   * @param {Object}  opt
   */
  sprite : function(opt) {
    var s   = new enchant.JGZ.SpriteEx(opt.w, opt.h);
    s.x     = opt.x;
    s.y     = opt.y;
    s.image = this._instance[opt.i];
    return s;
  }
});
/**
 * @scope enchant.JGZ.Sound.prototype
 */
enchant.JGZ.Sounds = enchant.Class.create(enchant.JGZ.Resource, {
  /**
   * サウンドリソースを管理する
   * sourcesは配列
   * {
   *    "success" : "sounds/success.wav",
   *    "false"   : "sounds/false.wav",
   * }
   * @constructs
   * @param {Array} sources 
   */
  initialize : function(sources) {
    enchant.JGZ.Resource.call(this, sources);
  },
  /**
   * サウンドを再生する
   * @param {String}  idx
   */
  play : function(idx) {
    this._instance[idx].play();
  },
  /**
   * サウンドを停止する
   * @param {String}  idx
   */
  stop : function(idx) {
    this._instance[idx].stop();
  }
});
